<?php
/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of classCore
 * Solo una clase para ahorrar codigo para manejar la navegación
 *
 * @author kumda
 */
class Core {

    /**
     * Este Metodo evita la impresion en pantalla del cache de una pagina WEB
     */
    public function pageNoCache() {
        header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
        header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
        header("Cache-Control: no-cache, must-revalidate");
        header("Pragma: no-cache");
    }// Fin del Metodo

/**
 *Este metodo permite imprimir los datos en pantalla bajo la codificación preferida del usuario,
 * por defecto, si en el metodo no se declara un argumento se tomará la codificacion
 * universal UTF-8.
 * @author Jonas Reyes [kumda]
 * @author www.kumda.com.ve
 * @author jonasrey@gmail.com
 * @access public
 * @param string $charset
 * @return boolean
 * @example ../documentacion/doc.class.Core.pageCharset.php Como usar este Metodo.
 *
 */
    public function pageCharset($charset=null) {
        if (!$charset) {
            header('Content-Type: text/html; charset=utf-8');
            return true;
        }else {
            header('Content-Type: text/html; charset='.$charset);
            return true;
        }
    }// Fin del Metodo

    //put your code here
    public function Atras($nBoton="Volver Atr&aacute;s"){
        
        $boton='<br /><button type="button" name="btnAtras" class="btnNavegacion" onclick="javascript:history.go(-1);">'.$nBoton.'</button>';
        
        return $boton;
    }
    public function AtrasURL($url="print.ingresar_admin.php",$nBoton="Volver Atr&aacute;s"){

        $boton='<br /><button type="button" name="btnAtras" class="btnNavegacion" onclick="javascript:location.href=\''.$url.'\'">'.$nBoton.'</button>';

        return $boton;
    }

    public function btnSelf($nBoton="Volver Atr&aacute;s"){
        
        $boton='<br /><button type="button" name="btnAtras" class="btnNavegacionSelf" onclick="javascript:location.href=\''.$_SERVER['PHP_SELF'].'\';">'.$nBoton.'</button>';
        
        return $boton;
    }

    public function btnSelfNoBr($nBoton="Volver Atr&aacute;s",$url="EditorPlantilla.php"){
        $boton="<br><button type=\"button\" name=\"btnAtras\" class=\"btnEdicion\" onclick=\"javascript:location.href='$url'\">$nBoton</button>";
        return $boton;
    }

    public function btnEditar($nBoton="Editar",$url="index.php"){
        $boton="<br><button type=\"button\" name=\"btnAtras\" class=\"btnEdicion\" onclick=\"javascript:location.href='$url'\">$nBoton</button>";
        return $boton;
    }

    public function Cabecera(){//Cabecera del Documento HTML a imprimir
        ?>
        <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <meta http-equiv="Cache-Control" content="no-cache" />
    <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
    <META HTTP-EQUIV="Expires" CONTENT="-1">
    <title></title>
    <script type="text/javascript" language="javascript" src="js/jquery-1.2.6.min.js"></script>
    <script type="text/javascript" language="javascript" src="js/inicio.js"></script>
    <script type="text/javascript" language="javascript" src="js/tabber-minimized.js"></script>
    <link rel="stylesheet" type="text/css" href="estilos/default.css" media="all" />
    </head>
    <body>
        <?
        return true;
    }

    public function CabeceraRedicet($URL="EditorPlantilla.php",$TIEMPO=0){// Cabecera del HTML con orden de Redireccion
        ?>
        <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <meta http-equiv="Refresh" content="<?=$TIEMPO;?>; URL=<?=$URL;?>" />
    <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
    <META HTTP-EQUIV="Expires" CONTENT="-1">
    <title></title>
    <script type="text/javascript" language="javascript" src="js/jquery-1.2.6.min.js"></script>
    <script type="text/javascript" language="javascript" src="js/inicio.js"></script>
    <link rel="stylesheet" type="text/css" href="estilos/default.css" media="all" />
    </head>
    <body>
        <?
        return true;
    }

    public function MsgError($Msg="Se ha producido un Error.",$IMG="imagenes/dialog-error.png"){// Cabecera del HTML con orden de Redireccion
        if (!self::ValidarExistencia($IMG)) {
            $IMG="../".$IMG;
        }
        ?>
<span class="MsgError" style="width:98%;margin-left:auto;margin-right:auto;margin-bottom:1px;display:table;background-color:#FBEFEF;border:red solid 2px;padding:5px;
font-size:14px;text-align:center;font-family:Helvetica,Arial,FreeSans,verdana;
vertical-align:middle;"><span style="display:table-row;vertical-align:middle;"><span style="display:table-cell;vertical-align:middle;"><img class="imgError" src="<?=$IMG;?>" alt="" /></span><span style="padding-left:10px;text-align:justify;display:table-cell;vertical-align:middle;"><?=$Msg;?></span></span></span>
        <?
        return true;
    }

/* Este metodo devuelve la fecha actual en formato compatible con tipo de MySQL*/
    public function GetDateTime($tipo=0){
  $Fecha=getdate();
  $Anio=$Fecha["year"];
  $Mes=$Fecha["mon"];
  $Dia=$Fecha["mday"];
  $Hora=$Fecha["hours"].":".$Fecha["minutes"].":".$Fecha["seconds"];

        if($tipo=='A' || $tipo=='a') {
            $DateTime=$Anio;
        }elseif($tipo=='M' || $tipo=='m') {
            // convertir a texto
            switch ($Mes){
                case 1:
                    $Mes="Enero";
                    break;
                case 2:
                    $Mes="Febrero";
                    break;
                case 3:
                    $Mes="Marzo";
                    break;
                case 4:
                    $Mes="Abril";
                    break;
                case 5:
                    $Mes="Mayo";
                    break;
                case 6:
                    $Mes="Junio";
                    break;
                case 7:
                    $Mes="Julio";
                    break;
                case 8:
                    $Mes="Agosto";
                    break;
                case 9:
                    $Mes="Septiembre";
                    break;
                case 10:
                    $Mes="Octubre";
                    break;
                case 11:
                    $Mes="Noviembre";
                    break;
                case 12:
                    $Mes="Diciembre";
                    break;

            }
            $DateTime=$Mes;
        }elseif($tipo=='D' || $tipo=='d') {
            $DateTime=$Dia;
        }elseif ($tipo=='total' || $tipo=='t') {
            $DateTime=$Anio."-".$Mes."-".$Dia." ".$Hora;
        }elseif ($tipo=='fecha' || $tipo=='f') {
            $DateTime=$Anio."-".$Mes."-".$Dia;
        }elseif($tipo=='hora' || $tipo=='h') {
            $DateTime=$Hora;
        }elseif ($tipo=='year' || $tipo=='y') {
            $DateTime=$Anio;
        }

        return $DateTime;
  
    }

/**
 * Este metodo valida que la variable pasada por parametro efectivamente este definida,
 * es decir que no este vacia o con valores null.
 * @param mixto $variable puede ser una cadena de caracteres o un array.
 * @param Integer $opcion pueden ser dos valores: [0=(Por defecto) indica que $variable es String; 1=indica que $variable es unn Array]
 * @return Boolean
 */
    public function ValidacionBasica($variable,$opcion=0){
        if ($opcion==0) {
            $xVar=trim($variable); // Evitamos que pasen valores vacios
            if (isset ($xVar) && !empty($xVar)) {
                return true;
            }else {
                return false; // Devolvemos False porque la Variable no cumple con la condicion
                    }
        }else {
            $xVar=$variable; // Evitamos que pasen valores vacios
            if (isset ($xVar) && !empty($xVar)) {
                return true;
            }else {
                return false; // Devolvemos False porque la Variable no cumple con la condicion
                    }
        }

    }/* Fin de Metodo*/

    public function ValidarExtension($texto,$extend){
    $expresion='^[a-zA-Z0-9_\.\/\-]+\.'.$extend.'$';
    if (eregi($expresion,$texto)) {
        return true;
    }else {
        return false;
    }
    }// fin de Metodo

/**
 *
 * @param <type> $NombreArchivo
 * @return <type> boolean
 * Verifica de que un archivo dado exista en el servidor
 */
    public function ValidarExistencia($NombreArchivo){
        if (file_exists($NombreArchivo)) {
            return true;
        }else {
            return false;
        }
    }// Fin del Metodo

    public function GetOptionsDiasMes(){
        $Options="";
        //<option value="01">01</option>
        $diasMes=31;
        for($i=01;$i<=$diasMes;$i++){
            $Options.="\n<option value=\"$i\">$i</option>";
        }
        return $Options;

    }

    public function GetOptionsMeses(){
        $Options="";
        //<option value="01">01</option>
        $MesesAno=12;
        for($i=01;$i<=$MesesAno;$i++){
            $Options.="\n<option value=\"$i\">$i</option>";
        }
        return $Options;

    }

    public function GetOptionsAno(){
        $fecha=getdate();
        $Options="";
        //<option value="01">01</option>
        $year=$fecha['year'];
        for($i=$year;$i<=$year+1;$i++){
            $Options.="\n<option value=\"$i\">$i</option>";
        }
        return $Options;

    }

    public function GetAno(){
        $fecha=getdate();
        $Options="";
        $year=$fecha['year'];
  
        return $year;

    }

    public function ValidaCampoTexto($campo,$charMin=1,$charMax=15){
        $length=strlen($campo);
        if (ctype_alpha($campo)) {
            if ($length>=$charMin) {
                if ($length<=$charMax) {
                    return true;
                }else {
                    return 2; // dos significa que el numero de caracteres del
                    //campo es superior al maximo permitido.
                }
            }else {
                return 1;   // uno significa que el contenido del campo es inferior
                            // al numero minimo de caracteres.
            }
        }else {
            return 0;// cero significa que el contenido del campo no es de texto
        }
    }// fin del metodo

    public function ValidaCampoOracion($campo,$charMin=1,$charMax=150){
        $length=strlen($campo);
        if (ctype_print($campo)) {
            if ($length>=$charMin) {
                if ($length<=$charMax) {
                    return true;
                }else {
                    return 2; // dos significa que el numero de caracteres del
                    //campo es superior al maximo permitido.
                }
            }else {
                return 1;   // uno significa que el contenido del campo es inferior
                            // al numero minimo de caracteres.
            }
        }else {
            return 0;// cero significa que el contenido del campo no es de texto
        }
    }// fin del metodo

    public function ValidarEmail($email){
    $expresion='^[a-z0-9]+([\.]?[a-z0-9_-]+)*@[a-z0-9]+([\.-]+[a-z0-9]+)*\.[a-z]{2,}$';
    if (ereg($expresion,$email)) {
        return true;
    }else {
        return false;
    }
    }// fin de Metodo

    public function ValidarNumero($numero,$minimo=6,$maximo=8){
        // La salida de esta funcion puede ser complementada con la funcion
        //number_format() para agregar separador de decimales a la cedula y
        //hacerla mas legible. - Este metodo tambien será usado para validar
        //el codigo de Empleado que tendra un minimo de 2 digit y maximo de 4.
        if (self::ValidacionBasica($numero)) {
            // Continuamos si la variable realmente ha sido definida
        }

        // verificamos si la cedula se adapta al formato coumun venezolano,
        //es decir, el numero debe se como minimo de 6 digitos y maximo 8.
        $length=strlen($numero);

        if ($length>=$minimo && $length <=$maximo) {
            // si se cumple la condicion que continue el programa.
        }else {
            return false;// La cedula posee un numero muy pequeño de digitos o muy grande.
        }

        if (ctype_digit($numero)) {
            return true;
        }else {
            return false;
        }
    }// fin de Metodo

    public function MsgExito($Msg="Se ha realizado correctamente.",$IMG="imagenes/dialog-ok-apply.png"){// Cabecera del HTML con orden de Redireccion
        if (!self::ValidarExistencia($IMG)) {
            $IMG="../".$IMG;
            if (!self::ValidarExistencia($IMG)) {
            $IMG="../".$IMG;
        }
        }
        ?>
        <span class="MsgError" style="width:98%;margin-left:auto;margin-right:auto;margin-bottom:1px;display:table;background-color:#CCFFCC;border:#00B300 solid 2px;padding:5px;
font-size:14px;text-align:center;font-family:Helvetica,Arial,FreeSans,verdana;
vertical-align:middle;"><span style="display:table-row;vertical-align:middle;"><span style="display:table-cell;vertical-align:middle;"><img class="imgError" src="<?=$IMG;?>" alt="" /></span><span style="padding-left:10px;text-align:justify;display:table-cell;vertical-align:middle;"><?=$Msg;?></span></span></span>
        <?;
    }

    public function Msg($Msg="Se ha realizado correctamente.",$IMG="imagenes/dialog-information.png"){// Cabecera del HTML con orden de Redireccion
        if (!self::ValidarExistencia($IMG)) {
            $IMG="../".$IMG;
        }
        ?>
        <span class="MsgError" style="width:98%;margin-left:auto;margin-right:auto;margin-bottom:1px;display:table;background-color:#E0EAF8;border:#2F74D0 solid 2px;padding:5px;
font-size:14px;text-align:center;font-family:Helvetica,Arial,FreeSans,verdana;
vertical-align:middle;"><span style="display:table-row;vertical-align:middle;"><span style="display:table-cell;vertical-align:middle;"><img class="imgError" src="<?=$IMG;?>" alt="" /></span><span style="padding-left:10px;text-align:justify;display:table-cell;vertical-align:middle;"><?=$Msg;?></span></span></span>
        <?;
    }

    public function Redirect($url="DEFAULT"){
        if ($url=="DEFAULT") {
            $URLLOCAL=$_SERVER['PHP_SELF'];
        }else {
            $URLLOCAL=$url;
        }
        echo<<<eof
<script type="text/javascript">
location.href="$URLLOCAL";
</script>
eof;
    }

    public function getMsgPhpError() {
        if ($error = error_get_last()) {
            
            return self::MsgError("<b>Tipo de error: </b>{$error['type']}.<br />"
                ."<b>Archivo: </b>{$error['file']}<br />"
                ."<b>Linea: </b>{$error['line']}.<br />"
                ."<b>Mensaje: </b>{$error['message']}.<br />");
        }else {
            return null;
        }
    }//Fin de Metodo

/**
 *Metodo para realizar busquedas dentro de arreglos asociativos.
 * @param Array $arrayBusqueda Arreglo donde queremos buscar
 * @param String $campoBusqueda nombre de la llave o key del Array asociativo donde queremos buscar.
 * @param String $textoBusqueda Texto a buscar.
 * @return Array es un arreglo bidimensional con una solo registro indexado por el 0, se haya un arreglo asociativo dentro.
 */
    public function arraySearchAssoc($arrayBusqueda, $campoBusqueda, $textoBusqueda) {
    // Funcion escrita por de Kireol, http://www.daniweb.com/forums/thread198382.html
    $nuevoArray = array();
    foreach($arrayBusqueda as $clave=>$subarray)
    {
        if($subarray[$campoBusqueda]==$textoBusqueda)
        {
            $nuevoArray[] = $subarray;
        }
    }
    return($nuevoArray);
    }// Fin del metodo

    public function cambiarFormatoFecha($fecha) {
        list($dia,$mes,$anio)=explode("/",$fecha);
        return $anio."-".$mes."-".$dia;
    }//Fin de Metodo

    public function fechaDiff($fecha1,$fecha2) {

        //calculo timestam de las dos fechas
list($anio1,$mes1,$dia1)=explode("-",$fecha1);
list($anio2,$mes2,$dia2)=explode("-",$fecha2);

$timestamp1 = mktime(0,0,0,$mes1,$dia1,$anio1);
$timestamp2 = mktime(4,12,0,$mes2,$dia2,$anio2);

//resto a una fecha la otra
$segundos_diferencia = $timestamp1 - $timestamp2;
//echo $segundos_diferencia;

//convierto segundos en días
$dias_diferencia = $segundos_diferencia / (60 * 60 * 24);

//obtengo el valor absoulto de los días (quito el posible signo negativo)
$dias_diferencia = abs($dias_diferencia);

//quito los decimales a los días de diferencia
$dias_diferencia = floor($dias_diferencia);

return $dias_diferencia;
    }
}
?>